package actual;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-10-27
 * Time: 19:49
 */
//案例一: 实现查找并删除文件
public class Demo1 {
    public static void main(String[] args) {
        //1.先输入要扫描的目录,以及要删除的文件
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要扫描的路径: ");
        String rootDirPath = scanner.next();
        System.out.println("请输入要删除的文件名关键字: ");
        String toDeleteName = scanner.next();

        File rootDir = new File(rootDirPath);
        //判断这个路径是否正确
        if (!rootDir.isDirectory()){
            System.out.println("输入的路径有误!");
            return;
        }
        //2.遍历目录 把指定目录的所有文件和子目录 都遍历一遍找到要删除的文件
        //文件系统目录是一个树形结构 通过这个方法来实现递归并删除的操作
        scanDir(rootDir,toDeleteName);
    }

    private static void scanDir(File rootDir, String toDeleteName) {
        //1.先列出rootDir中都有那些内容(就是子目录有那些)
        File[] files = rootDir.listFiles();
        if (files == null){
            //表示当前rootDir是一个空目录
            return;
        }
        //2.遍历当前列表中的内容 如果是普通文件,就检测文件名是否是要删除的文件
        //如果是目录 那么就递归的进行遍历
        for (File f:files) {
            //这个循环遍历的过程 (类型 (i) : 遍历的容器)
            if (f.isFile()){
                //如果是一个普通文件
                if (f.getName().contains(toDeleteName)){
                    //contains包含的意思 不要求名字完全一样 有关键字的就删除
                    deleteFile(f);
                }
            }else {
                //表示不是普通文件 是一个目录的话 那么就递归操作
                scanDir(f,toDeleteName);
            }
        }
    }

    private static void deleteFile(File f) {
        try {
            System.out.println("确定要删除文件: " + f.getCanonicalPath() + " 吗?");
            Scanner scanner = new Scanner(System.in);
            String choice = scanner.next();
            if (choice.equals("Y") || choice.equals("y")){
                f.delete();
                System.out.println("文件删除成功!");
            }else {
                System.out.println("文件删除失败!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
